<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>Document</title>
	</head>
	<body>
		
	</body>
</html>
<script>
	// 工厂函数
	function person(name, gender, age) {
		var per = {};
		per.name = name;
		per["gender"] = gender;
		per.age = age;

		per.say = function() {
			alert("我的名字叫" + per.name + ", 我今年" + per.age + "岁, 我的性别是" + per.gender + ".");
		};

		return per;

	}

	// var p1 = person("小明", "男", 22);
	// // 读取对象的属性
	// console.log(p1["name"], p1.age, p1.gender);
	// // 调用对象的方法
	// p1.say();

	// var p2 = person("小花", "女", 18);
	// console.log(p2.name, p2.age, p2.gender);
	// p2.say();


	// new的用法
	function test() {
		console.log(666);
	}

	// new也可以调用函数, 当函数不需要参数时, 小括号可以去掉
	// new test;
	// new test();


	function Animal(type, color) {

		this.type = type;
		this.color = color;
		this.show = function() {
			console.log(this.type, this.color);
		};
		// return this;
		// 如果不写return 通过new调用构造函数默认return this, 如果写上返回值, return的就是该返回值(注意: 如果return的不是对象类型, 那么返回值还是this)
		// return {};

	}

	var cat = new Animal("鸟", "黄色");
	console.log(cat);

	// 一般new后面的函数我们称之为构造函数, 首字母大写
	// var cat = new Animal("猫科", "花");
	// // console.log(cat.type, cat.color);
	// // cat.show();
	// console.log(cat);






</script>